package com.mini;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MiniDbUtils {

    public MiniDbUtils () {}

    // 关闭数据库连接对象,即Connection类型对象
    public static void close(Connection conn) throws SQLException {
        if (conn != null) {
            conn.close();
        }
    }
    // 关闭结果集对象，即ResultSet类型对象
    public static void close(ResultSet rs) throws SQLException {
        if (rs != null) {
            rs.close();
        }
    }
    // 关闭SQL预编译器对象
    public static void close(Statement stmt) throws SQLException {
        if (stmt != null) {
            stmt.close();
        }
    }

    // 关闭数据库连接对象的同时将异常在内部消化掉（无声的关闭）
    public static void closeQuietly(Connection conn) {
        try {
            close(conn);    // 复用代码，不用继续判空
        } catch (SQLException e) {
            // 捕获异常后不作任何处理
        }
    }
    // 关闭结果集对象的同时将异常在内部消化掉（无声的关闭）
    public static void closeQuietly(ResultSet rs) {
        try {
            close(rs);    // 复用代码，不用继续判空
        } catch (SQLException e) {
            // 捕获异常后不作任何处理
        }
    }
    // 关闭SQL预编译器对象的同时将异常在内部消化掉（无声的关闭）
    public static void closeQuietly(Statement stmt) {
        try {
            close(stmt);    // 复用代码，不用继续判空
        } catch (SQLException e) {
            // 捕获异常后不作任何处理
        }
    }
    /* 同时关闭数据库连接对象、SQL预编译器对象和结果集对象（无声的关闭）
     * 使用 try{}finally{} 的形式，即使其中一个关闭出现异常仍然可以关闭其他对象 */
    public static void closeQuietly(Connection conn,Statement stmt,ResultSet rs) {
        try {
            closeQuietly(rs);
        } finally {
            try {
                closeQuietly(stmt);
            } finally {
                closeQuietly(conn);
            }
        }
    }
}
